﻿#pragma once
namespace LK
{
	namespace Collection
	{
		/**
		@brief 表示一个集合接口*/
		struct ICollections;
		/**@brief 表示一个指定元素类型的集合接口*/
		template<class T>struct ICollection;
		/**
		@brief 表示一个排序接口*/
		struct ISortables;
		/**
		@brief 表示一个数组接口*/
		struct IArrays;
		/**
		@brief 表示一个缓存块*/
		struct Buffer;
		/**
		@brief 表示一个默认类型消息缓存块*/
		struct DefaultMessageBuffer;
		/**
		@brief 消息包*/
		struct MessagePack;
		/**
		@brief 数组迭代器，用于数组元素的逐项访问*/
		template<class T>struct ArrayIterator;
		/**
		@brief 数组反向迭代器，用于数组元素的逐项访问*/
		template<class T>struct ReverseArrayIterator;
		/**
		@brief 表示一个固定最大大小的数组对象*/
		template<class T, index_t MaxSize>struct FixedArray;
		/**
		@brief 表示一个默认数组类型的数组对象*/
		template<class T>struct DefaultArray;
		/**
		@brief 表示一个引用类型数组的代理*/
		template<class T>struct ReferenceArray;
		/**
		@brief 表示一个数组接口*/
		template<class T>struct IArray;
		/**
		@brief 表示一个链表模板*/
		template<typename T>struct List;
		/**
		@brief 表示一个链表代理模板*/
		template<typename T>struct PList;
		/**
		@brief 表示一个数组的引用*/
#if _GCC || _VC>1700
		template<class T>using PArray = ::LK::ptr< IArray<T> >;
		template<class T>using PDefaultArray = ::LK::ptr< DefaultArray<T> >;
		template<class T>using PReferenceArray = ::LK::ptr< ReferenceArray<T> >;
		template<class T, index_t MaxSize>using PFixedArray = ::LK::ptr< FixedArray<T, MaxSize> >;
#endif
	}
}
